package com.zang.greedy;

/**
 * @author ZVerify
 * @since 2022/11/22 15:31
 **/
public class 分发糖果 {
    public int candy(int[] ratings) {

        int len = ratings.length;
        // 存放糖果
        int[] candyVec = new int[len];
        // 假定第一个糖果为，后面再回来该他
        candyVec[0] = 1;
        // 先根据左边改右边
        for (int i = 1; i < len; i++) {
            candyVec[i] = (ratings[i] > ratings[i - 1]) ? candyVec[i - 1] + 1 : 1;
        }
        // 2、起点下标 ratings.length - 2 从右往左， 只要左边 比 右边 大，
        // 此时 左边的糖果应该 取本身的糖果数（符合比它左边大） 和 右边糖果数 + 1 二者的最大值，
        // 这样才符合 它比它左边的大，也比它右边大
        // 这里不能直接+1而是要
        for (int i = len - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1]) {
                candyVec[i] = Math.max(candyVec[i], candyVec[i + 1] + 1);
            }
        }
        int ans = 0;
        for (int num : candyVec) {
            ans += num;
        }
        return ans;
    }
}
